//package com.jd.config;
//
//import com.baomidou.mybatisplus.core.parser.ISqlParser;
//import com.baomidou.mybatisplus.core.parser.ISqlParserFilter;
//import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
//import com.baomidou.mybatisplus.extension.exceptions.ApiException;
//import com.baomidou.mybatisplus.extension.parsers.BlockAttackSqlParser;
//import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
//import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
//import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
//import net.sf.jsqlparser.expression.Expression;
//import net.sf.jsqlparser.expression.StringValue;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.ibatis.mapping.MappedStatement;
//import org.apache.ibatis.reflection.MetaObject;
//import org.mybatis.spring.annotation.MapperScan;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.transaction.annotation.EnableTransactionManagement;
//
//import java.util.ArrayList;
//import java.util.List;
//
//@EnableTransactionManagement
//@Configuration
//@MapperScan({"cn.mukanyun.base.dao","cn.mukanyun.*.*.mapper"})
//public class MybatisPlusConfig {
//
//
//    /**
//     * 加载分页插件
//     * @return
//     */
//    @Bean
//    public PaginationInterceptor paginationInterceptor() {
//        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//        List<ISqlParser> sqlParserList = new ArrayList<>();
//        TenantSqlParser tenantSqlParser = new TenantSqlParser();
//        tenantSqlParser.setTenantHandler(new TenantHandler() {
//            @Override
//            public Expression getTenantId(boolean where) {
//                // 该 where 条件 3.2.0 版本开始添加的，用于分区是否为在 where 条件中使用
//            	String currentUserTenantId = TenantInfoHolder.getTenantId();
////				log.info("获取租户id："+currentUserTenantId);
//				if(StringUtils.isBlank(currentUserTenantId)) {
//					throw new ApiException("获取当前租户id为空！");
//				}
//                return new StringValue(currentUserTenantId);
//            }
//
//            @Override
//            public String getTenantIdColumn() {
//                return "tenant_id";
//            }
//
//            @Override
//            public boolean doTableFilter(String tableName) {
//                // 这里可以判断是否过滤表
//                if ("tenant_info".equalsIgnoreCase(tableName)
//                		|| "t_role".equalsIgnoreCase(tableName)
//
//                ) {
//                    return true;
//                }
//                return false;
//            }
//        });
//        sqlParserList.add(tenantSqlParser);
//
//        // 攻击 SQL 阻断解析器、加入解析链
//        sqlParserList.add(new BlockAttackSqlParser());
//        paginationInterceptor.setSqlParserList(sqlParserList);
//
//        paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
//            @Override
//            public boolean doFilter(MetaObject metaObject) {
//                MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
//                // 过滤自定义查询此时无租户信息约束出现
//                if (
//                	"cn.mukanyun.core.element.mapper.ContractElementMapper.getByResId".equals(ms.getId())
//                	||"cn.mukanyun.core.order.mapper.SyncOrderMapper.countDeptOrder".equals(ms.getId())
//                ) {
//                    return true;
//                }
//                return false;
//            }
//        });
//
//        return paginationInterceptor;
//    }
//
//}
